package Managedbean;

import java.io.Serializable;
import java.util.ArrayList;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import controlador.ProductoEJBRemote;

import modelo.Producto;

@ManagedBean
@SessionScoped
public class TiendaMB implements Serializable {

	private static final long serialVersionUID = 1L;
	@EJB(name="ProductoEJBRemote", mappedName="ProductoEJBRemote")
	ProductoEJBRemote bean;
	private ArrayList<Producto> productos = new ArrayList<Producto>();
	private int total = 0;
	private String msg = "";
	
	public TiendaMB(){
	}

	@PostConstruct
	public void init() {
		if (productos.isEmpty()){
			msg = "NINGUN PRODUCTO EN CARRO";
			total = 0;
		}
		else{
			msg = "CANTIDAD DE PRODUCTOS EN CARRO : " + cantidadProductos();
			total = calcularTotal();
		}
	}
	
	
	private int calcularTotal(){
		int sumatoria = 0;
		for (Producto p : productos){
			int inc = p.getStock();
			int precio = bean.buscarProducto(p.getId()).getPrecio();
			p.setPrecio(precio * inc);
			sumatoria += p.getPrecio();
		}
		return sumatoria;
	}
	
	private int cantidadProductos(){
		int sumatoria = 0;
		for (Producto p : productos){
			sumatoria += p.getStock();
		}
		return sumatoria;
	}
	
	public void agregarProducto(String id){
			boolean nuevo = true;
			int i = 0;
			if (bean.buscarProducto(id).getStock() >= 1){ ////se busca el stock del producto para verificar si le quedan stock.
				for (Producto p : productos){
					if (p.getId().equals(id)){
						int suma = p.getStock();///aqui el stock pertenece a la cantidad en la compra, no al stock total.
						suma++;
						p.setStock(suma);
						nuevo = false;			
						break;
					}
					i++;
				}
				if (nuevo){
					productos.add(bean.buscarProducto(id));
					i = productos.size() - 1;
					productos.get(i).setStock(1);
					
				}
			}
			init();
	}
	
	public String comprarProductos(){
		if (!productos.isEmpty()){
			for (Producto p:productos){		
				Producto nuevoP = bean.buscarProducto(p.getId());
				int nuevoStock = nuevoP.getStock();		
				nuevoStock -= p.getStock();
				bean.actualizarStock(p.getId(), nuevoStock);
			}
		}
		productos = new ArrayList<Producto>();
		init();
		
		return "index";
	}
	
	public String mostrarCarrito(){
		init();
		return "carrito";
	}
	
	public void eliminarProducto(Producto p){
		productos.remove(p);
		init();
	}
	
	public void sumarCantidad(String id){
		for (Producto p : productos){
			if (p.getId().equals(id)){
				if (p.getStock() < bean.buscarProducto(p.getId()).getStock()){
					int inc = p.getStock() + 1;
					p.setStock(inc);
				}
				break;
			}
		}
		init();
	}
	
	public void restarCantidad(String id){
		for (Producto p : productos){
			if (p.getId().equals(id)){
				if (p.getStock() > 1){
					int inc = p.getStock() - 1;
					p.setStock(inc);
				}	
				break;
			}
		}
		init();
	}
	
///////////////////////////GETTER ANS SETTER.........
	
	
	public ArrayList<Producto> getProductos() {
		return productos;
	}


	public void setProductos(ArrayList<Producto> productos) {
		this.productos = productos;
	}


	public int getTotal() {
		return total;
	}


	public void setTotal(int total) {
		this.total = total;
	}


	public String getMsg() {
		return msg;
	}


	public void setMsg(String msg) {
		this.msg = msg;
	}
	
	
	
}
